package com.zdy.im.user.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;


import com.sixeco.framework.common.data.BasePage;
import com.sixeco.framework.http.data.vo.ResponseResultList;
import com.sixeco.framework.util.PageUtils;
import com.zdy.im.user.dto.request.UserInfoRequestDto;
import com.zdy.im.user.dto.response.UserInfoResponseDto;

import java.io.InputStream;

/**
 * @ClassName: UserInfoService.java
 * @Description: 用户表的数据交互处理类
 * @author xxx
 * @date   2021-05-08 17:45:21
 * @version V1.0.0
 * <p>
 * ----------------------------------------------------------------------------
 *  modifyer    modifyTime                 comment
 *
 * ----------------------------------------------------------------------------
 * </p>
 */
public interface UserInfoService {



    /**
     * 保存用户表更新数据库和缓存的实现方法
     * @param userInfoRequestDto  UserInfoRequestDto
     * @return
     */
    UserInfoResponseDto saveUserInfo(UserInfoRequestDto userInfoRequestDto);

    /**
     * 保存用户表更新数据库和缓存的实现方法
     * @return
     */
    boolean saveBatchUserInfo(Collection<UserInfoRequestDto> entityList, int batchSize);

    /**
     * 保存用户表更新数据库和缓存的实现方法
     * @return
     */
    boolean saveOrUpdateBatchUserInfo(Collection<UserInfoRequestDto> entityList, int batchSize);



    /**
     * 更新用户表同时更新数据库和缓存的实现方法
     * @param userInfoRequestDto  UserInfoRequestDto
     * @return
     */
    boolean updateUserInfo (UserInfoRequestDto userInfoRequestDto);

    /**
     * 更新用户表同时更新数据库和缓存的实现方法
     * @return
     */
    boolean updateBatchById(Collection<UserInfoRequestDto> entityList, int batchSize);


    /**
     * 通过主键ID删除对象信息实现缓存和数据库,同时删除的方法
     * @param  userInfoIds
     * @return
     */
    int delUserInfoByIds(List<Long>  userInfoIds);


    /**
     * 通过主键ID更新对象用户表实现缓存和数据库更新的方法
     * @param  userInfoId
     * @return
     */
        UserInfoResponseDto getUserInfoById(long userInfoId);



    /**
     * 通过分页获取UserInfoResponseDto信息实现查找缓存和数据库的方法
     * @param page BasePage
     * @return
     */
    List<UserInfoResponseDto> getUserInfoByPage(ResponseResultList<UserInfoResponseDto> responseResultList,BasePage page);


    /**
     * 通过分页获取UserInfo 用户表信息实现查找缓存和数据库的方法
     * @param page BasePage
     * @return
     * @author xxx
     * @date 2021-05-08 17:45:21
     */
    ResponseResultList<UserInfoResponseDto> getUserInfoByNextPage(BasePage page);


    public PageUtils queryPage(Map<String, Object> params);


    /**
    * 通过上传excel 保存数据到数据库
    * @param initialStream
    * @return
    */
    public boolean saveData(InputStream initialStream);

    boolean getByLoginName(String loginName);


    /**
     * 用户账号搜索，搜索名称，登陆名称，手机号码
     * @param searchContent 用户账号搜索，搜索名称，登陆名称，手机号码
     * @return List<UserInfo>
     */
    List<UserInfoResponseDto> queryUserPageBySearch(BasePage page );

    UserInfoResponseDto getUserInfoByLoginName(String loginName);

    Map<Long,UserInfoResponseDto> getUserInfoByIds(Collection<Long> idList);
}